package com.ruoyi.pack.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.ruoyi.common.annotation.Excel;

import java.util.List;

/**
 * 运单对象 way_bill
 *
 * @author ruoyi
 * @date 2025-08-07
 */
@ApiModel(value="way_bill对象", description="运单")
@Data
@TableName("way_bill")
public class WayBill
{
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    @TableId(type = IdType.ASSIGN_ID)
    private String id;

    /** 所属部门 */
    @Excel(name = "所属部门")
    private String sysOrgCode;

    /** 运单编号 */
    @Excel(name = "运单编号")
    private String billNo;

    /** 运单状态 */
    @Excel(name = "运单状态")
    private String billStatus;

    /** 发货方 */
    @Excel(name = "发货方")
    private String senderName;

    /** 发货方联系人 */
    @Excel(name = "发货方联系人")
    private String contactA;

    /** 发货方联系电话 */
    @Excel(name = "发货方联系电话")
    private String phoneA;

    /** 发货地址 */
    @Excel(name = "发货地址")
    private String addressA;

    /** 发货坐标 */
    @Excel(name = "发货坐标")
    private String coordinatesA;

    /** 收货方 */
    @Excel(name = "收货方")
    private String receiverName;

    /** 收货方联系人 */
    @Excel(name = "收货方联系人")
    private String contactB;

    /** 收货方联系电话 */
    @Excel(name = "收货方联系电话")
    private String phoneB;

    /** 收货地址 */
    @Excel(name = "收货地址")
    private String addressB;

    /** 收货坐标 */
    @Excel(name = "收货坐标")
    private String coordinatesB;

    // ==================== 位置跟踪相关字段 ====================

    /** 绑定的定位器ID */
    @Excel(name = "绑定的定位器ID")
    private Long locatorId;

    /** 绑定的定位器编码 */
    @Excel(name = "绑定的定位器编码")
    @TableField(updateStrategy = FieldStrategy.ALWAYS)
    private String locatorCode;

    /** 当前经度 */
    @Excel(name = "当前经度")
    private BigDecimal currentLongitude;

    /** 当前纬度 */
    @Excel(name = "当前纬度")
    private BigDecimal currentLatitude;

    /** 当前省份 */
    @Excel(name = "当前省份")
    private String currentProvince;

    /** 当前城市 */
    @Excel(name = "当前城市")
    private String currentCity;

    /** 当前区县 */
    @Excel(name = "当前区县")
    private String currentDistrict;

    /** 当前详细地址 */
    @Excel(name = "当前详细地址")
    private String currentAddress;

    /** 位置更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "位置更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date locationUpdateTime;

    /** 城市变更时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "城市变更时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date cityUpdateTime;

    /** 延迟状态 */
    @Excel(name = "延迟状态", readConverterExp = "正常=按时,延迟=超时")
    private String delayStatus;

    /** 延迟小时数 */
    @Excel(name = "延迟小时数")
    private Double delayHours;

    /** 交接状态 */
    @Excel(name = "交接状态", readConverterExp = "待交接=待交接,已交接=已交接")
    private String handoverStatus;

    /** 到达时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "到达时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date arrivalTime;

    /** 发货方省份 */
    @Excel(name = "发货方省份")
    @TableField("sender_province")
    private String senderProvince;

    /** 发货方城市 */
    @Excel(name = "发货方城市")
    @TableField("sender_city")
    private String senderCity;

    /** 发货方区县 */
    @Excel(name = "发货方区县")
    @TableField("sender_district")
    private String senderDistrict;

    /** 收货方省份 */
    @Excel(name = "收货方省份")
    @TableField("receiver_province")
    private String receiverProvince;

    /** 收货方城市 */
    @Excel(name = "收货方城市")
    @TableField("receiver_city")
    private String receiverCity;

    /** 收货方区县 */
    @Excel(name = "收货方区县")
    @TableField("receiver_district")
    private String receiverDistrict;

    /** 收货方经度 */
    @Excel(name = "收货方经度")
    @TableField("receiver_longitude")
    private BigDecimal receiverLongitude;

    /** 收货方纬度 */
    @Excel(name = "收货方纬度")
    @TableField("receiver_latitude")
    private BigDecimal receiverLatitude;

    /** 货物名称 */
    @Excel(name = "货物名称")
    private String goodsName;

    /** 货物类型 */
    @Excel(name = "货物类型")
    private String goodsType;

    /** 重量 */
    @Excel(name = "重量")
    private BigDecimal goodsWeight;

    /** 重量单位 */
    @Excel(name = "重量单位")
    private String weightUnit;

    /** 体积 */
    @Excel(name = "体积")
    private Long volume;

    /** 运输方式 */
    @Excel(name = "运输方式")
    private String transportType;

    /** 运费 */
    @Excel(name = "运费")
    private String carriage;

    /** 预计发货时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "预计发货时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date sendTime;

    /** 预计到达时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "预计到达时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date arriveTime;

    /** 支付方式 */
    @Excel(name = "支付方式")
    private String payType;

    /** 备注 */
    @Excel(name = "备注")
    private String remark;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /** 创建人 */
    @Excel(name = "创建人")
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /** 更新人 */
    @Excel(name = "更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /** 删除标志（0代表存在 2代表删除） */
    @Excel(name = "删除标志")
    @TableLogic
    private String delFlag;

    /** 查询参数：开始时间 */
    @TableField(exist = false)
    private String beginTime;

    /** 查询参数：结束时间 */
    @TableField(exist = false)
    private String endTime;

    /** 查询参数：排序条件字符串 (格式: column:asc 或 column:desc) */
    @TableField(exist = false)
    private String sortColumnsStr;

    /** 查询参数：排序字段 */
    @TableField(exist = false)
    private String sortField;

    /** 查询参数：排序方向 */
    @TableField(exist = false)
    private String sortOrder;

    /** 查询参数：指定ID列表（用于导出选中数据） */
    @TableField(exist = false)
    private List<String> ids;

}
